"""
命令行管理工具
"""

import click
import subprocess
from pathlib import Path
from scripts.init_admin import init_admin
from scripts.init_db import init_db
from scripts.drop_tables import drop_tables, drop_specific_table, get_all_tables
from scripts.seed_llm_models import seed_llm_models
from scripts.init_user import init_user
from dao.postgresql_connect import engine, Base

@click.group()
def cli():
    """ZKD Tech AI 平台管理工具"""
    pass

@cli.command()
def init_database():
    """初始化数据库表"""
    init_db()
    print("数据库表创建完成")

@cli.command()
def create_admin():
    """创建管理员账号"""
    init_admin()

@cli.command()
@click.option('--username', '-u', help='用户名')
@click.option('--phone', '-p', help='手机号')
@click.option('--password', '-w', help='密码')
@click.option('--country-code', '-c', default='+86', help='国家区号，默认为+86（中国）')
def create_user(username, phone, password, country_code):
    """创建普通用户账号
    
    可以通过命令行参数指定用户名、手机号和密码，或者使用环境变量 USER_USERNAME、USER_PHONE 和 USER_PASSWORD
    """
    init_user(username, phone, password, country_code)

@cli.command()
@click.confirmation_option(prompt='确定要删除所有数据库表吗？此操作不可恢复！')
def drop_database():
    """删除所有数据库表"""
    drop_tables()
    print("数据库表删除完成")

@cli.command()
@click.argument('table_name')
@click.confirmation_option(prompt='确定要删除该表吗？此操作不可恢复！')
def drop_table(table_name):
    """删除指定的数据库表
    
    TABLE_NAME: 要删除的表名
    """
    drop_specific_table(table_name)

@cli.command()
def list_tables():
    """列出所有数据库表"""
    tables = get_all_tables()
    if tables:
        print("数据库中的表：")
        for table in tables:
            print(f"- {table}")
    else:
        print("数据库中没有表")

@cli.command()
def generate_schemas():
    """从 shared/types 目录下的 JSON schema 生成 Python 模型"""
    # 获取项目根目录
    root_dir = Path(__file__).parent.parent
    types_dir = root_dir / "shared" / "types"
    output_dir = root_dir / "api" / "schemas" / "generated"
    
    # 确保输出目录存在
    output_dir.mkdir(parents=True, exist_ok=True)
    
    # 遍历 types 目录中的所有 json 文件
    for schema_file in types_dir.glob("*.json"):
        output_file = output_dir / f"{schema_file.stem}.py"
        
        # 构建命令
        cmd = [
            "datamodel-codegen",
            "--input", str(schema_file),
            "--output", str(output_file),
            "--input-file-type", "jsonschema",
            "--output-model-type", "pydantic_v2.BaseModel",
            "--encoding", "utf-8"
        ]
        
        print(f"正在从 {schema_file} 生成 {output_file}")
        subprocess.run(cmd, check=True)
    
    print("所有 schema 生成完成！")

@cli.command()
def seed_llm_models_data():
    """向 llm_models 表中插入测试数据"""
    seed_llm_models()

if __name__ == '__main__':
    cli() 